﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Sispe.Entities;
using Sispe.BussinesLogic;
using Microsoft.Practices.Unity;
using System.IO;
using Sispe.UI.ReportesCeyca;

namespace Sispe.UI
{
    public partial class FrmTrabajador : Form
    {
        [Dependency]
        public ITrabajadorBL trabajadorBL { get; set; }

        [Dependency]
        public IExpedienteBL expedienteBL { get; set; }

        [Dependency]
        public IFotoBL fotoBL { get; set; }

        [Dependency]
        public IContratoBL contratoBL { get; set; }

        [Dependency]
        public IEstadoCivilBL estCivilBL { get; set; }

        [Dependency]
        public ISexoBL sexoBL { get; set; }

        [Dependency]
        public IUsuarioMenuBL usuMenuBL { get; set; }

        [Dependency]
        public ICurriculoBL curriculoBL { get; set; }

        [Dependency]
        public IUsuarioBL usuarioBL { get; set; }

        public FrmTrabajador()
        {
            InitializeComponent();
            this.BuildUp();
        }

        bool isExtend;

        public void Extend()
        {
            isExtend = true;
        }

        public USUARIO currentUsuarioTrabajador { get; set; }
        public int IdTrabajador;

        private void FrmTrabajador_Load(object sender, EventArgs e)
        {
            if (currentUsuarioTrabajador != null)
            {
                /* if (cbxPersona.Checked == false && cbxTrabajador.Checked == false)
                 {
                     gbPersona.Enabled = false;
                     gbTrabajador.Enabled = false;
                 }*/
                menuLlena();
            }
            else
            {
                /*   if (cbxPersona.Checked == false && cbxTrabajador.Checked == false)
                   {
                       gbPersona.Enabled = false;
                       gbTrabajador.Enabled = false;
                   }*/
                cargaData();
            }
        }

        public void menuLlena()
        {
            var datoUsuario = usuMenuBL.GetAllFromUsuarioByPersonaFromLogin(currentUsuarioTrabajador.TRABAJADOR.PERSONA.Dni);

            var permiso = (from p in usuMenuBL.GetAllUsuarioMenu(datoUsuario.IdUsuario)
                           select p.MENU.Tag.ToString()).ToArray();

            System.Windows.Forms.Button[] botones = new System.Windows.Forms.Button[]{
            this.BtnDerechoHabientes,this.btnCondiciones,this.btnSanciones,this.btnPermisos,this.btnEditar,this.btnNuevo,
            this.btnDetalle,this.btnHistorialTrab,this.btnAsignarPermiso};

            var noVisible = from nv in botones
                            where !permiso.Contains(nv.Tag.ToString())
                            select nv;

            noVisible.ToList().ForEach(nv => nv.Enabled = false);

            cargaData();
        }

        public void cargaData()
        {
            tRABAJADORBindingSource.DataSource = trabajadorBL.GetAllFromTrabajador();
        }

        /*public void cargaFoto()
        {
            TRABAJADOR currentTrabajador = tRABAJADORBindingSource.Current as TRABAJADOR;
            if (currentTrabajador != null)
            {
                var img = fotoBL.GetAllFotoById(currentTrabajador.Id);
                if (img.Imagen != null)
                {
                    MemoryStream stream = new MemoryStream(img.Imagen);
                    pbFotoTrab.Image = Image.FromStream(stream);
                }
                else
                {
                    pbFotoTrab.Image = pbFotoTrab.ErrorImage;
                }
            }
        }*/

        private void btnNuevo_Click(object sender, EventArgs e)
        {
            FrmMttoTrabajador frm = new FrmMttoTrabajador();
            frm.NuevoTrabajador();
            frm.ShowDialog();
            cargaData();
            //cargaFoto();
        }

        public TRABAJADOR currentTrabajador { get; set; }
        private void tRABAJADORRadGridView_DoubleClick(object sender, EventArgs e)
        {
            if (isExtend == true)
            {
                currentTrabajador = tRABAJADORBindingSource.Current as TRABAJADOR;
                this.Close();
            }
        }

        private void tRABAJADORDataGridView_Click(object sender, EventArgs e)
        {
            //cargaFoto();
        }

        private void btnEditar_Click(object sender, EventArgs e)
        {
            var trabajador = tRABAJADORBindingSource.Current as TRABAJADOR;

            if (trabajador != null)
            {
                //Verificamos si tiene un expediente, caso contrario se le crea uno
                //Esto es para cada trabajador ya registrado en la BD
                if (trabajador.EXPEDIENTE == null)
                {
                    var expediente = new EXPEDIENTE()
                    {
                        IdTrabajador = trabajador.Id,
                        FichaPersonal = false,
                        HojaInduccion = false,
                        HistorialFotocheck = false,
                        InformePsicologico = false,
                        CertificadoEstudios = false,
                        CertificadoTrabajo = false,
                        HojaVida = false,
                        CursoCertificados = false,
                        CopiaDNI = false,
                        ConstanciaAFP = false,
                        PartidaMatrimonio = false,
                        CopiaDNIPareja = false,
                        CopiaDNIHijos = false,
                        ConstanciaEstudiosHijos = false,
                        HojasComplementarias = false,
                        Retenciones = false
                    };

                    expedienteBL.AddExpedienteNuevo(expediente);
                }

                //Verificamos si tiene un CV, caso contrario se le crea uno
                //Esto es para cada trabajador ya registrado en la BD
                if (trabajador.CURRICULO == null)
                {
                    var cv = new CURRICULO()
                    {
                        IdTrabajador = trabajador.Id,
                        Imagen = null,
                        Hash = null
                    };

                    curriculoBL.AddCurriculo(cv);
                }

                FrmMttoTrabajador frm = new FrmMttoTrabajador();
                frm._trabajador = trabajador;
                //frm.IdTrabajador = trabajador.Id;
                frm.EditarTrabajador();
                frm.ShowDialog();
                cargaData();
                //cargaFoto();
            }
            else
            {
                MessageBox.Show("Debe seleccionar un Trabajador.", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void btnDetalle_Click(object sender, EventArgs e)
        {
            var trabajador = tRABAJADORBindingSource.Current as TRABAJADOR;

            if (trabajador != null)
            {
                FrmMttoTrabajador frm = new FrmMttoTrabajador();
                frm._trabajador = trabajador;
                frm.DetalleTrabajador();
                frm.ShowDialog();
                cargaData();
                //cargaFoto();
            }
            else
            {
                MessageBox.Show("Debe seleccionar un Trabajador.", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        //METODO PARA ENTRAR A LAS BUSQUEDAS
        public void buscar()
        {
            if (rbtnPersona.Checked == true)
            {
                System.Windows.Forms.CheckBox[] checkPersona = new System.Windows.Forms.CheckBox[]{
                this.cbxPerApellidos,this.cbxPerDni,this.cbxPerEstCivil,this.cbxPerNombres,this.cbxPerSexo};

                var chekedPersona = (from c in checkPersona
                                     where c.Checked == true
                                     select c).Count();

                if (chekedPersona.Equals(1))
                {
                    busquedaTrabajadorByPersona();
                }
                else if (chekedPersona.Equals(2))
                {
                    busquedaTrabajadorByPersonaDobles();
                }
                else if (chekedPersona.Equals(3))
                {
                    busquedaTrabajadorByPersonaTriple();
                }
                else if (chekedPersona.Equals(4))
                {
                    busquedaTrabajadorByPersonaCuadruple();
                }
                else if (chekedPersona.Equals(5))
                {
                    busquedaTrabajadorByPersonaCompleta();
                }
                else if (chekedPersona.Equals(0))
                {
                    tRABAJADORBindingSource.DataSource = trabajadorBL.GetAllFromTrabajador();
                }
                txtDni.Text = "";
                txtApellidos.Text = "";
                txtNombres.Text = "";
                txtSexo.Text = "";
                txtEstadoCivil.Text = "";
            }
            else if (btnTrabajador.Checked == true)
            {
                System.Windows.Forms.CheckBox[] checkTrabajador = new System.Windows.Forms.CheckBox[]{
                this.cbxEdad,this.cbxTrabRegPensionario,this.cbxTrabSocio,this.cbxNUbigeo};

                System.Windows.Forms.RadioButton[] checkRbtnTrab = new System.Windows.Forms.RadioButton[]{
                this.rbtnRecomendable,this.rbtnSindicato};

                var chekedTrabajador = (from c in checkTrabajador
                                        where c.Checked == true
                                        select c).Count();

                var chekedRbtnTrab = (from c in checkRbtnTrab
                                      where c.Checked == true
                                      select c).Count();

                if (chekedTrabajador.Equals(1) || chekedRbtnTrab.Equals(1))
                {
                    busquedaTrabajadorByTrabajador();
                }
                else if (chekedTrabajador.Equals(2))
                {
                    busquedaTrabajadorByTrabajadorDoble();
                }
                else if (chekedTrabajador.Equals(3))
                {
                    busquedaTrabajadorByTrabajadorTriple();
                }
                else if (chekedTrabajador.Equals(4))
                {
                    busquedaTrabajadorByTrabajadorCompleta();
                }
                else if (chekedTrabajador.Equals(0))
                {
                    tRABAJADORBindingSource.DataSource = trabajadorBL.GetAllFromTrabajador();
                }
                txtNEdad.Text = "";
                txtRPensionario.Text = "";
                txtSocio.Text = "";
                txtUbigeo.Text = "";
            }
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            buscar();
        }

        //BOTONES PARA REALACIONAR TRABAJADOR
        private void BtnDerechoHabientes_Click(object sender, EventArgs e)
        {
            TRABAJADOR currentTrabajador = tRABAJADORBindingSource.Current as TRABAJADOR;
            if (currentTrabajador != null)
            {
                ESTADO_CIVIL estCivil = new ESTADO_CIVIL();
                SEXO sexo = new SEXO();
                currentTrabajador.PERSONA.ESTADO_CIVIL = estCivil;
                currentTrabajador.PERSONA.SEXO = sexo;
                currentTrabajador.PERSONA.ESTADO_CIVIL.Descripcion = (from ec in estCivilBL.GetAllFromEstadoCivil()
                                                                      where ec.IdEstadoCivil.Equals(currentTrabajador.PERSONA.IdEstadoCivil)
                                                                      select ec.Descripcion).FirstOrDefault();
                currentTrabajador.PERSONA.SEXO.Descripcion = (from s in sexoBL.GetAllFromSexo()
                                                              where s.IdSexo.Equals(currentTrabajador.PERSONA.IdSexo)
                                                              select s.Descripcion).FirstOrDefault();

                FrmRelacionDerechoHabientes frm = new FrmRelacionDerechoHabientes();
                frm.CurrentTrabajador = currentTrabajador;
                frm.ShowDialog();
            }
            else
            {
                MessageBox.Show("Seleccione un Trabajador");
            }
        }

        private void btnPermisos_Click(object sender, EventArgs e)
        {
            TRABAJADOR currentTrabajador = tRABAJADORBindingSource.Current as TRABAJADOR;
            if (currentTrabajador != null)
            {
                FrmPermisos frm = new FrmPermisos();
                frm.CurrentTrabajador = currentTrabajador;
                frm.permisoTrabajador();
                frm.ShowDialog();
            }
            else
            {
                MessageBox.Show("Seleccione un Trabajador");
            }
        }

        private void btnCondiciones_Click(object sender, EventArgs e)
        {
            TRABAJADOR currentTrabajador = tRABAJADORBindingSource.Current as TRABAJADOR;
            if (currentTrabajador != null)
            {
                FrmCondiciones frm = new FrmCondiciones();
                frm.CurrentTrabajador = currentTrabajador;
                frm.condicionTrabajador();
                frm.ShowDialog();
            }
            else
            {
                MessageBox.Show("Seleccione un Trabajador");
            }
        }

        private void btnSanciones_Click(object sender, EventArgs e)
        {
            TRABAJADOR currentTrabajador = tRABAJADORBindingSource.Current as TRABAJADOR;
            if (currentTrabajador != null)
            {
                FrmSanciones frm = new FrmSanciones();
                frm.CurrentTrabajador = currentTrabajador;
                frm.sancionTrabajador();
                frm.ShowDialog();
            }
            else
            {
                MessageBox.Show("Seleccione un Trabajador");
            }
        }

        private void btnHistorialTrab_Click(object sender, EventArgs e)
        {
            TRABAJADOR currentTrabajador = tRABAJADORBindingSource.Current as TRABAJADOR;
            if (currentTrabajador != null)
            {
                FrmHistorialTrabajador frm = new FrmHistorialTrabajador();
                frm.CurrentTrabajador = currentTrabajador;
                frm.ShowDialog();
            }
            else
            {
                MessageBox.Show("Seleccione un Trabajador");
            }
        }

        private void btnAsignarPermiso_Click(object sender, EventArgs e)
        {
            TRABAJADOR currentTrabajador = tRABAJADORBindingSource.Current as TRABAJADOR;

            var contrato = contratoBL.GetContratosByTrabajadorId(currentTrabajador.Id);

            if (contrato != null && contrato.FechaTermino.Date >= DateTime.Now.Date)
            {
                if (currentTrabajador != null)
                {
                    var query = contratoBL.GetFromContratoVigenteByTrabajador(currentTrabajador.PERSONA.IdPersona);
                    if (query.Count != 0)
                    {
                        FrmMttoPermiso frm = new FrmMttoPermiso();
                        frm._currentTrabajador = currentTrabajador;
                        frm._currentContrato = query.SingleOrDefault();
                        frm.NuevoPermiso();
                        frm.ShowDialog();
                    }
                    else
                    {
                        MessageBox.Show("Necesita de un Contrato Vigente", "ERROR!", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
                else
                {
                    MessageBox.Show("Seleccione un Trabajador", "ERROR!", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            else
            {
                MessageBox.Show("Seleccione un Trabajador con Contrato Vigente.", "ERROR!", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            
        }

        //BUSQUEDA UNITARIA DEL TRABAJADOR POR LA PERSONA
        public void busquedaTrabajadorByPersona()
        {
            if (cbxPerDni.Checked == true)
            {
                tRABAJADORBindingSource.DataSource = trabajadorBL.GetAllFromPersonaByDni(txtDni.Text);
            }
            else if (cbxPerNombres.Checked == true)
            {
                tRABAJADORBindingSource.DataSource = trabajadorBL.GetAllFromPersonaByNombres(txtNombres.Text);
            }
            else if (cbxPerApellidos.Checked == true)
            {
                tRABAJADORBindingSource.DataSource = trabajadorBL.GetAllFromPersonaByApellidos(txtApellidos.Text);
            }
            else if (cbxPerSexo.Checked == true)
            {
                tRABAJADORBindingSource.DataSource = trabajadorBL.GetAllFromPersonaBySexo(txtSexo.Text);
            }
            else if (cbxPerEstCivil.Checked == true)
            {
                tRABAJADORBindingSource.DataSource = trabajadorBL.GetAllFromPersonaByEstadoCivil(txtEstadoCivil.Text);
            }

        }

        //BUSQUEDA DOBLE DEL TRABAJADOR POR LA PERSONA
        public void busquedaTrabajadorByPersonaDobles()
        {
            if (cbxPerDni.Checked == true && cbxPerNombres.Checked == true)
            {
                tRABAJADORBindingSource.DataSource = trabajadorBL.GetAllFromPersonaByDniAndNombres(txtDni.Text, txtNombres.Text);
            }
            else if (cbxPerDni.Checked == true && cbxPerApellidos.Checked == true)
            {
                tRABAJADORBindingSource.DataSource = trabajadorBL.GetAllFromPersonaByDniAndApellidos(txtDni.Text, txtApellidos.Text);
            }
            else if (cbxPerDni.Checked == true && cbxPerSexo.Checked == true)
            {
                tRABAJADORBindingSource.DataSource = trabajadorBL.GetAllFromPersonaByDniAndSexo(txtDni.Text, txtSexo.Text);
            }
            else if (cbxPerDni.Checked == true && cbxPerEstCivil.Checked == true)
            {
                tRABAJADORBindingSource.DataSource = trabajadorBL.GetAllFromPersonaByDniAndEstadoCovil(txtDni.Text, txtEstadoCivil.Text);
            }
            else if (cbxPerNombres.Checked == true && cbxPerApellidos.Checked == true)
            {
                tRABAJADORBindingSource.DataSource = trabajadorBL.GetAllFromPersonaByNombreAndApellidos(txtNombres.Text, txtApellidos.Text);
            }
            else if (cbxPerNombres.Checked == true && cbxPerSexo.Checked == true)
            {
                tRABAJADORBindingSource.DataSource = trabajadorBL.GetAllFromPersonaByNombreAndSexo(txtNombres.Text, txtSexo.Text);
            }
            else if (cbxPerNombres.Checked == true && cbxPerEstCivil.Checked == true)
            {
                tRABAJADORBindingSource.DataSource = trabajadorBL.GetAllFromPersonaByNombreAndEstadoCivil(txtNombres.Text, txtEstadoCivil.Text);
            }
            else if (cbxPerApellidos.Checked == true && cbxPerSexo.Checked == true)
            {
                tRABAJADORBindingSource.DataSource = trabajadorBL.GetAllFromPersonaByApellidosAndSexo(txtApellidos.Text, txtSexo.Text);
            }
            else if (cbxPerApellidos.Checked == true && cbxPerEstCivil.Checked == true)
            {
                tRABAJADORBindingSource.DataSource = trabajadorBL.GetAllFromPersonaByApellidosAndEstadoCivil(txtApellidos.Text, txtEstadoCivil.Text);
            }
            else if (cbxPerSexo.Checked == true && cbxPerEstCivil.Checked == true)
            {
                tRABAJADORBindingSource.DataSource = trabajadorBL.GetAllFromPersonaBySexoAndEstadoCivil(txtSexo.Text, txtEstadoCivil.Text);
            }
        }

        //BUSQUEDA TRIPLE DEL TRABAJADOR POR LA PERSONA
        public void busquedaTrabajadorByPersonaTriple()
        {
            if (cbxPerDni.Checked == true && cbxPerNombres.Checked == true && cbxPerApellidos.Checked == true)
            {
                tRABAJADORBindingSource.DataSource = trabajadorBL.GetAllFromPersonaByDniNombresAndApellidos(txtDni.Text, txtNombres.Text, txtApellidos.Text);
            }
            else if (cbxPerDni.Checked == true && cbxPerNombres.Checked == true && cbxPerSexo.Checked == true)
            {
                tRABAJADORBindingSource.DataSource = trabajadorBL.GetAllFromPersonaByDniNombresAndSexo(txtDni.Text, txtNombres.Text, txtSexo.Text);
            }
            else if (cbxPerDni.Checked == true && cbxPerNombres.Checked == true && cbxPerEstCivil.Checked == true)
            {
                tRABAJADORBindingSource.DataSource = trabajadorBL.GetAllFromPersonaByDniNombresAndEstadoCivil(txtDni.Text, txtNombres.Text, txtEstadoCivil.Text);
            }
            else if (cbxPerNombres.Checked == true && cbxPerApellidos.Checked == true && cbxPerSexo.Checked == true)
            {
                tRABAJADORBindingSource.DataSource = trabajadorBL.GetAllFromPersonaByNombresApellidosAndSexo(txtNombres.Text, txtApellidos.Text, txtSexo.Text);
            }
            else if (cbxPerNombres.Checked == true && cbxPerApellidos.Checked == true && cbxPerEstCivil.Checked == true)
            {
                tRABAJADORBindingSource.DataSource = trabajadorBL.GetAllFromPersonaByNombresApellidosAndEstadoCivil(txtNombres.Text, txtApellidos.Text, txtEstadoCivil.Text);
            }
            else if (cbxPerApellidos.Checked == true && cbxPerSexo.Checked == true && cbxPerDni.Checked == true)
            {
                tRABAJADORBindingSource.DataSource = trabajadorBL.GetAllFromPersonaByApellidosSexoAndDni(txtApellidos.Text, txtSexo.Text, txtDni.Text);
            }
            else if (cbxPerApellidos.Checked == true && cbxPerSexo.Checked == true && cbxPerEstCivil.Checked == true)
            {
                tRABAJADORBindingSource.DataSource = trabajadorBL.GetAllFromPersonaByApellidosSexoAndEstadoCivil(txtApellidos.Text, txtSexo.Text, txtEstadoCivil.Text);
            }
            else if (cbxPerSexo.Checked == true && cbxPerEstCivil.Checked == true && cbxPerDni.Checked == true)
            {
                tRABAJADORBindingSource.DataSource = trabajadorBL.GetAllFromPersonaBySexoEstadoCivilAndDni(txtSexo.Text, txtEstadoCivil.Text, txtDni.Text);
            }
            else if (cbxPerSexo.Checked == true && cbxPerEstCivil.Checked == true && cbxPerNombres.Checked == true)
            {
                tRABAJADORBindingSource.DataSource = trabajadorBL.GetAllFromPersonaBySexoEstadoCivilAndNombre(txtSexo.Text, txtEstadoCivil.Text, txtNombres.Text);
            }
        }

        //BUSQUEDA CUADRUPLE DEL TRABAJADOR POR LA PERSONA
        public void busquedaTrabajadorByPersonaCuadruple()
        {
            if (cbxPerDni.Checked == true && cbxPerNombres.Checked == true && cbxPerApellidos.Checked == true && cbxPerSexo.Checked == true)
            {
                tRABAJADORBindingSource.DataSource = trabajadorBL.GetAllFromPersonaByDniNombresApellidosAndSexo(txtDni.Text, txtNombres.Text, txtApellidos.Text, txtSexo.Text);
            }
            else if (cbxPerDni.Checked == true && cbxPerNombres.Checked == true && cbxPerApellidos.Checked == true && cbxPerEstCivil.Checked == true)
            {
                tRABAJADORBindingSource.DataSource = trabajadorBL.GetAllFromPersonaByDniNombresApellidosAndEstadoCivil(txtDni.Text, txtNombres.Text, txtApellidos.Text, txtEstadoCivil.Text);
            }
            else if (cbxPerDni.Checked == true && cbxPerNombres.Checked == true && cbxPerSexo.Checked == true && cbxPerEstCivil.Checked == true)
            {
                tRABAJADORBindingSource.DataSource = trabajadorBL.GetAllFromPersonaByDniNombresSexoAndEstadoCivil(txtDni.Text, txtNombres.Text, txtSexo.Text, txtEstadoCivil.Text);
            }
            else if (cbxPerNombres.Checked == true && cbxPerApellidos.Checked == true && cbxPerSexo.Checked == true && cbxPerEstCivil.Checked == true)
            {
                tRABAJADORBindingSource.DataSource = trabajadorBL.GetAllFromPersonaByNombresApellidosSexoAndEstadoCivil(txtNombres.Text, txtApellidos.Text, txtSexo.Text, txtEstadoCivil.Text);
            }
            else if (cbxPerApellidos.Checked == true && cbxPerSexo.Checked == true && cbxPerEstCivil.Checked == true && cbxPerDni.Checked == true)
            {
                tRABAJADORBindingSource.DataSource = trabajadorBL.GetAllFromPersonaByApellidosSexoEstadoCivilAndDni(txtApellidos.Text, txtSexo.Text, txtEstadoCivil.Text, txtDni.Text);
            }
        }

        //BUSQUEDA COMPLETA DEL TRABAJADOR POR LA PERSONA
        public void busquedaTrabajadorByPersonaCompleta()
        {
            if (cbxPerDni.Checked == true && cbxPerNombres.Checked == true && cbxPerApellidos.Checked == true && cbxPerSexo.Checked == true && cbxPerEstCivil.Checked == true)
            {
                tRABAJADORBindingSource.DataSource = trabajadorBL.GetAllFromPersonaByDniNombresApellidosSexoAndEstadCivil(txtDni.Text, txtNombres.Text, txtApellidos.Text, txtSexo.Text, txtEstadoCivil.Text);
            }
        }


        //BUSQUEDA UNITARIA DEL TRABAJADOR POR TRABAJADOR
        public void busquedaTrabajadorByTrabajador()
        {
            if (cbxEdad.Checked == true)
            {
                tRABAJADORBindingSource.DataSource = trabajadorBL.GetAllFromTrabajadorByNEdad(txtNEdad.Text);
            }
            else if (cbxTrabRegPensionario.Checked == true)
            {
                tRABAJADORBindingSource.DataSource = trabajadorBL.GetAllFromTrabajadorByRPensionario(txtRPensionario.Text);
            }
            else if (cbxTrabSocio.Checked == true)
            {
                tRABAJADORBindingSource.DataSource = trabajadorBL.GetAllFromTrabajadorBySocio(txtSocio.Text);
            }
            else if (cbxNUbigeo.Checked == true)
            {
                tRABAJADORBindingSource.DataSource = trabajadorBL.GetAllFromTrabajadorByUbigeo(txtUbigeo.Text);
            }
            else if (rbtnRecomendable.Checked == true)
            {
                tRABAJADORBindingSource.DataSource = trabajadorBL.GetAllFromTrabajadorByRecomendable(Convert.ToBoolean("True"));
            }
            else if (rbtnSindicato.Checked == true)
            {
                tRABAJADORBindingSource.DataSource = trabajadorBL.GetAllFromTrabajadorBySindicato(Convert.ToBoolean("True"));
            }
        }

        //BUSQUEDA DOBLE DEL TRABAJADOR POR TRABAJADOR
        public void busquedaTrabajadorByTrabajadorDoble()
        {
            if (cbxEdad.Checked == true && cbxTrabRegPensionario.Checked == true)
            {
                tRABAJADORBindingSource.DataSource = trabajadorBL.GetAllFromTrabajadorByNEdadAndRPensionario(txtNEdad.Text, txtRPensionario.Text);
            }
            else if (cbxEdad.Checked == true && cbxTrabSocio.Checked == true)
            {
                tRABAJADORBindingSource.DataSource = trabajadorBL.GetAllFromTrabajadorByNEdadAndSocio(txtNEdad.Text, txtSocio.Text);
            }
            else if (cbxEdad.Checked == true && cbxNUbigeo.Checked == true)
            {
                tRABAJADORBindingSource.DataSource = trabajadorBL.GetAllFromTrabajadorByNEdadAndUbigeo(txtNEdad.Text, txtUbigeo.Text);
            }
            else if (cbxTrabRegPensionario.Checked == true && cbxTrabSocio.Checked == true)
            {
                tRABAJADORBindingSource.DataSource = trabajadorBL.GetAllFromTrabajadorByRPensionarioAndSocio(txtRPensionario.Text, txtSocio.Text);
            }
            else if (cbxTrabRegPensionario.Checked == true && cbxNUbigeo.Checked == true)
            {
                tRABAJADORBindingSource.DataSource = trabajadorBL.GetAllFromTrabajadorByRPensionarioAndUbigeo(txtRPensionario.Text, txtUbigeo.Text);
            }
            else if (cbxTrabSocio.Checked == true && cbxNUbigeo.Checked == true)
            {
                tRABAJADORBindingSource.DataSource = trabajadorBL.GetAllFromTrabajadorBySocioAndUbigeo(txtSocio.Text, txtUbigeo.Text);
            }
        }

        //BUSQUEDA TRIPLE DEL TRABAJADOR POR TRABAJADOR
        public void busquedaTrabajadorByTrabajadorTriple()
        {
            if (cbxEdad.Checked == true && cbxTrabRegPensionario.Checked == true && cbxTrabSocio.Checked == true)
            {
                tRABAJADORBindingSource.DataSource = trabajadorBL.GetAllFromTrabajadorByNEdadRPensionarioAndSocio(txtNEdad.Text, txtRPensionario.Text, txtSocio.Text);
            }
            else if (cbxEdad.Checked == true && cbxTrabRegPensionario.Checked == true && cbxNUbigeo.Checked == true)
            {
                tRABAJADORBindingSource.DataSource = trabajadorBL.GetAllFromTrabajadorByNEdadRPensionarioAndUbigeo(txtNEdad.Text, txtRPensionario.Text, txtUbigeo.Text);
            }
            else if (cbxEdad.Checked == true && cbxTrabSocio.Checked == true && cbxNUbigeo.Checked == true)
            {
                tRABAJADORBindingSource.DataSource = trabajadorBL.GetAllFromTrabajadorByNEdadSocioAndUbigeo(txtNEdad.Text, txtSocio.Text, txtUbigeo.Text);
            }
            else if (cbxTrabRegPensionario.Checked == true && cbxTrabSocio.Checked == true && cbxNUbigeo.Checked == true)
            {
                tRABAJADORBindingSource.DataSource = trabajadorBL.GetAllFromTrabajadorByRPensionarioSocioAndUbigeo(txtRPensionario.Text, txtSocio.Text, txtUbigeo.Text);
            }
        }

        //BUSQUEDA COMPLETA DEL TRABAJADOR POR TRABAJADOR
        public void busquedaTrabajadorByTrabajadorCompleta()
        {
            if (cbxEdad.Checked == true && cbxTrabRegPensionario.Checked == true && cbxTrabSocio.Checked == true && cbxNUbigeo.Checked == true)
            {
                tRABAJADORBindingSource.DataSource = trabajadorBL.GetAllFromTrabajadorByNEdadRPensionarioSocioAndUbigeo(txtNEdad.Text, txtRPensionario.Text, txtSocio.Text, txtUbigeo.Text);
            }
        }

        private void cbxPerDni_CheckedChanged(object sender, EventArgs e)
        {
            if (cbxPerDni.Checked == true)
            {
                txtDni.ReadOnly = false;
            }
            else if (cbxPerDni.Checked == false)
            {
                txtDni.ReadOnly = true;
            }
        }

        private void cbxPerNombres_CheckedChanged(object sender, EventArgs e)
        {
            if (cbxPerNombres.Checked == true)
            {
                txtNombres.ReadOnly = false;
            }
            else if (cbxPerNombres.Checked == false)
            {
                txtNombres.ReadOnly = true;
            }
        }

        private void cbxPerApellidos_CheckedChanged(object sender, EventArgs e)
        {
            if (cbxPerApellidos.Checked == true)
            {
                txtApellidos.ReadOnly = false;
            }
            else if (cbxPerApellidos.Checked == false)
            {
                txtApellidos.ReadOnly = true;
            }
        }

        private void cbxPerSexo_CheckedChanged(object sender, EventArgs e)
        {
            if (cbxPerSexo.Checked == true)
            {
                txtSexo.ReadOnly = false;
            }
            else if (cbxPerSexo.Checked == false)
            {
                txtSexo.ReadOnly = true;
            }
        }

        private void cbxPerEstCivil_CheckedChanged(object sender, EventArgs e)
        {
            if (cbxPerEstCivil.Checked == true)
            {
                txtEstadoCivil.ReadOnly = false;
            }
            else if (cbxPerEstCivil.Checked == false)
            {
                txtEstadoCivil.ReadOnly = true;
            }
        }



        private void cbxTrabRegPensionario_CheckedChanged(object sender, EventArgs e)
        {
            if (cbxTrabRegPensionario.Checked == true)
            {
                txtRPensionario.ReadOnly = false;
            }
            else if (cbxTrabRegPensionario.Checked == false)
            {
                txtRPensionario.ReadOnly = true;
            }
        }

        private void cbxTrabSocio_CheckedChanged(object sender, EventArgs e)
        {
            if (cbxTrabSocio.Checked == true)
            {
                txtSocio.ReadOnly = false;
            }
            else if (cbxTrabSocio.Checked == false)
            {
                txtSocio.ReadOnly = true;
            }
        }

        private void rbtnPersona_CheckedChanged(object sender, EventArgs e)
        {
            if (rbtnPersona.Checked == true && btnTrabajador.Checked == false)
            {
                gbTrabajador.Enabled = false;
                gbPersona.Enabled = true;
            }
            //else if (btnTrabajador.Checked == false)
            //{
            //    gbPersona.Enabled = true;
            //}
        }

        private void btnTrabajador_CheckedChanged(object sender, EventArgs e)
        {
            if (btnTrabajador.Checked == true && rbtnPersona.Checked == false)
            {
                gbPersona.Enabled = false;
                gbTrabajador.Enabled = true;
            }
            //else if (rbtnPersona.Checked == false)
            //{
            //    gbTrabajador.Enabled = true;
            //}
        }


        private void cbxEdad_CheckedChanged(object sender, EventArgs e)
        {

            if (cbxEdad.Checked == true)
            {
                txtNEdad.ReadOnly = false;
            }
            if (cbxEdad.Checked == false)
            {
                txtNEdad.ReadOnly = true;
            }
        }

        private void txtNEdad_KeyPress_1(object sender, KeyPressEventArgs e)
        {
            if (Char.IsNumber(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsSeparator(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        private void btnDownloadCV_Click(object sender, EventArgs e)
        {
            var _current = tRABAJADORBindingSource.Current as TRABAJADOR;
            var msg = "ERROR!";

            if (_current.CURRICULO != null)
            {
                if (_current.CURRICULO.Hash != null & _current.CURRICULO.Imagen != null)
                {
                    //string sPathToSaveFileTo = @"D:\AIP System\Pruebas";  // on this path i will create selected PDF File Data    open pdf for checking
                    string routeDownload = @"D:\\Curriculums SISPE";
                    string sPathToSaveFileTo = @"D:\\Curriculums SISPE\\" + _current.PERSONA.NombreCompleto + " - CV.pdf";

                    if (!System.IO.Directory.Exists(routeDownload))
                    {
                        Directory.CreateDirectory(routeDownload);
                        
                        // read in using GetValue and cast to byte array
                        byte[] fileData = (byte[])_current.CURRICULO.Imagen;
                        try
                        {
                            FileStream fs = new FileStream(sPathToSaveFileTo, FileMode.CreateNew, FileAccess.ReadWrite);
                            BinaryWriter bw = new BinaryWriter(fs);
                            bw.Write(fileData);
                            bw.Close();
                        }
                        catch (UnauthorizedAccessException ex)
                        {
                            msg = ex.Message;
                            MessageBox.Show(msg, "ERROR.", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        }
                        catch (IOException io)
                        {
                            msg = io.Message;
                            MessageBox.Show(msg, "ERROR.", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        }

                        MessageBox.Show("CV descargado en la ruta:" + sPathToSaveFileTo, "DESCARGADO!", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                    else
                    {
                        // read in using GetValue and cast to byte array
                        byte[] fileData = (byte[])_current.CURRICULO.Imagen;
                        try
                        {
                            FileStream fs = new FileStream(sPathToSaveFileTo, FileMode.CreateNew, FileAccess.ReadWrite);
                            BinaryWriter bw = new BinaryWriter(fs);
                            bw.Write(fileData);
                            bw.Close();
                        }
                        catch (UnauthorizedAccessException ex)
                        {
                            msg = ex.Message;
                            MessageBox.Show(msg, "ERROR.", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        }
                        catch (IOException io)
                        {
                            msg = io.Message;
                            MessageBox.Show(msg, "ERROR.", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        }

                        MessageBox.Show("CV descargado en la ruta:" + sPathToSaveFileTo, "DESCARGADO!", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
                else
                {
                    MessageBox.Show("Aún no se ha cargado ningún CV para este Trabajador.", "ERROR.", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            
        }

        private void btnFichaPersonal_Click(object sender, EventArgs e)
        {
            var _current = tRABAJADORBindingSource.Current as TRABAJADOR;
            if (_current != null)
            {
                var _usuario = usuarioBL.GetFromUsuarioByIdTrabajador(currentUsuarioTrabajador.TRABAJADOR.PERSONA.IdPersona);
                if (_usuario != null)
                {
                    if (_usuario.IdRol == 4 || _usuario.IdRol == 6)
                    {
                        ReportesCeyca.FrmFichaPersonal frm = new ReportesCeyca.FrmFichaPersonal();
                        frm.idPersona = _current.Id;
                        frm.ShowDialog();
                    }
                    else
                    {
                        MessageBox.Show("Usted no está autorizado para ver este Reporte.", "ERROR.", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
                else
                {
                    MessageBox.Show("No existe usuario Registrado.", "ERROR.", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            else
            {
                MessageBox.Show("Seleccione un trabajador del cual desee ver su Ficha Personal.", "ERROR.", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
    }
}
